package Esmanager

import (
	"context"
	"deepgox-go-admin/Infrastructures/Es"
	"deepgox-go-admin/Models/EsManager"
	"errors"
	"fmt"
	"github.com/olivere/elastic/v7"
)

const ESManagerChecksESIndex = "esmanager"

// EsManagerModelDoc 用户注册模型
type EsManagerModelDoc struct {
	EsManager.EsManagerModelDoc
}

// CreateIndexIfNotExists 索引不存在时，创建索引
// index 索引名称
// mapping 数据类型
func (esmanagerModel *EsManagerModelDoc) CreateIndexIfNotExists() error {
	ctx := context.Background()
	exists, err := Es.ESClient.IndexExists(ESManagerChecksESIndex).Do(ctx)
	if err != nil {
		return err
	}
	if exists {
		return nil
	}

	//info, err := Es.ESClient.CreateIndex(index).BodyString(mapping).Do(ctx)
	info, err := Es.ESClient.CreateIndex(ESManagerChecksESIndex).Do(ctx) // 如果只是想创建索引时，那么就不需要 BodyString() 方法
	if err != nil {
		return err
	}
	if !info.Acknowledged {
		return errors.New(fmt.Sprintf("ES 创建索引 [%s] 失败", ESManagerChecksESIndex))
	}
	return nil
}

// EsManagerByIdModeHandler 用户注册模型
type EsManagerByIdModeHandler struct {
	EsManager.EsManagerByIdModel
}

// CreateDoc 单条添加
// index 索引
// id 文档 id（可以直接为空字符串，当实参为空字符串时，es 会主动随机生成）
// body 需要添加的内容
func (EsManagerByIdModeHandler *EsManagerByIdModeHandler) CreateDoc(id string, body interface{}) (*elastic.IndexResponse, error) {
	client := Es.ESClient.Index().Index(ESManagerChecksESIndex)
	if "" != id {
		client = client.Id(id)
	}
	return client.BodyJson(body).Do(context.Background())
}

// FirstDoc 通过 id 取出数据
// index 索引
// id 需要取的文档记录 id
func (EsManagerByIdModeHandler *EsManagerByIdModeHandler) FirstDoc(id string) (*elastic.GetResult, error) {
	return Es.ESClient.Get().Index(ESManagerChecksESIndex).Id(id).Do(context.Background())
}
